import os
import glob
import pandas as pd


class IndexFindServer:
    """
    指标查找业务类
    """

    def __init__(self, dir_path):
        """
        初始化
        :param dir_path: 文件夹目录
        """
        # 去年数据集合
        self.pre_year_data = pd.DataFrame([])
        self.pre_year_files = []
        # 今年数据集合
        self.now_year_data = pd.DataFrame([])
        self.now_year_files = []
        new_year = 0
        # 遍历所有csv文件 获取最大年份
        csv_files = glob.glob(os.path.join(dir_path, '*.csv'))
        for csv_file in csv_files:
            file_name = csv_file[csv_file.rfind("\\") + 1:len(csv_file) - 4]
            file_year = int(file_name[0:4])
            if file_year > new_year:
                new_year = file_year

        # 遍历添加数据
        for csv_file in csv_files:
            file_name = csv_file[csv_file.rfind("\\") + 1:len(csv_file) - 4]
            file_year = int(file_name[0:4])
            file_task = file_name[5:6]
            if file_year < new_year:
                # 去年数据
                temp_df = pd.read_csv(csv_file, encoding='gbk')
                temp_df["task"] = file_task
                self.pre_year_data = pd.concat([self.pre_year_data, temp_df], ignore_index=True)
                self.pre_year_files.append(file_name)
            else:
                # 今年数据
                temp_df = pd.read_csv(csv_file, encoding='gbk')
                temp_df["task"] = file_task
                self.now_year_data = pd.concat([self.now_year_data, temp_df], ignore_index=True)
                self.now_year_files.append(file_name)

    def show_item_data(self):
        temp = list(self.now_year_data.keys())
        return temp[0:len(temp) - 1]


    def get_data(self, indexs, task, show_item) -> pd.DataFrame:
        """
        获取查找指标的数据
        :param indexs: 指标集合
        :param task: 季度
        :param show_item: 要展示的列名称
        :return: df，二维数据集
        """
        res = pd.DataFrame([],index=indexs)
        now_year_df = self.now_year_data.copy()
        pre_year_df = self.pre_year_data.copy()
        # 指标  合计
        # 现期数据
        temp = now_year_df[now_year_df["task"] == str(task)]
        temp = temp[temp["代码"].isin(indexs)].copy()
        temp = temp.set_index("代码",drop=False)
        res["指标"] = temp["代码"]
        res[self.now_year_files[task-1] + show_item] = temp[show_item]
        # 同比
        temp = pre_year_df[pre_year_df["task"] == str(task)]
        temp = temp[temp["代码"].isin(indexs)].copy()
        temp = temp.set_index("代码",drop=False)
        res[self.pre_year_files[task-1] + show_item] = temp[show_item]
        # 环比
        if task - 1 == 0:
            # 上一年环比 4 季度
            temp = pre_year_df[pre_year_df["task"] == "4"]
            temp = temp[temp["代码"].isin(indexs)].copy()
            temp = temp.set_index("代码",drop=False)
            res[self.pre_year_files[3] + show_item] = temp[show_item]
        else:
            # 当年环比
            temp = now_year_df[now_year_df["task"] == str(task-1)]
            temp = temp[temp["代码"].isin(indexs)].copy()
            temp = temp.set_index("代码", drop=False)
            res[self.now_year_files[task-1-1] + show_item] = temp[show_item]

        # 指标排序
        # res = res.sort_index()
        # 空值填充 0
        res = res.fillna("无该指标")
        # 重设索引
        res = res.reset_index(drop=True)
        return res



